
var React = require('react-native');
var {msg} = require('iflux-native');
var assign = require('object-assign');

var {
  Platform,
  } = React;


/**
 * 封装公共的fetch服务
 */
module.exports = (url, req) => {
  var request = {
    method: 'GET',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json',
      'Authorization': 'JWT ' + (window.token || ''),
      'Platform': Platform.OS
    }
  };

  var merge = assign({}, request, req);

  if (__DEV__) {
    console.log(url, merge);
  }

  return new Promise((resolve, reject) => {
    fetch(url, merge)
      .then((res) => res.json())
      .then((res) => {
        if (__DEV__) {
          console.log(JSON.stringify(res, null, 2));
        }

        //数据正确返回
        if (res.result === 'ok') {
          resolve(res.data);
        } else if (res.result === 'fail') {
          //后端返回错误
          msg.emit('app:tip', res.msg);
          reject(res.msg);
        } else if (res.result === 'tokenInvalid') {
          msg.emit('tokenInvalid');
        }
      })
      .catch((err) => {
        if (__DEV__) {
          console.log(err);
        }
        msg.emit('app:tip', '您的网络不给力');
        //TODO: 血的教训
        //是应用层使用的时候一定用then，不要直接用done
        //done会导致整个进程crash掉。
        reject(err);
      })
      .done();
  });
};
